package clases;

import java.util.ArrayList;

import utils.CapturarTeclado;
import utils.Constantes;

import com.Juego;

public class EntidadJugador extends Entidad {
	
	private Juego juego;
	private String idJugador;
	private long ultimoDisparo;
	private int vidas;
	private CapturarTeclado teclado;
	private String NombreJugador;
	public boolean hayParedArriba = false;
	public boolean hayParedAbajo = false;
	public boolean hayParedIzquierda = false;
	public boolean hayParedDerecha = false;
	private ArrayList<EntidadCorazon> vidasSprite = new ArrayList<EntidadCorazon>();
	
	/**
	 * Create a new entity to represent the players ship
	 *  
	 * @param game The game in which the ship is being created
	 * @param ref The reference to the sprite to show for the ship
	 * @param x The initial x location of the player's ship
	 * @param y The initial y location of the player's ship
	 */
	public EntidadJugador(Juego juego,String ref,int x,int y,int vidas, CapturarTeclado teclado, String nombreJugador,int numeroJugador) {
		super(ref,x,y);
		this.vidas = vidas;
		this.juego = juego;
		this.setTeclado(teclado);
		this.setNombreJugador(nombreJugador);
		for (int i=0;i<vidas;i++)
		{
			if (numeroJugador==1)
			{
				this.vidasSprite.add(new EntidadCorazon(this.juego,"sprites/convida.gif",50+(i*30),10));
			}
			else
			{
				this.vidasSprite.add(new EntidadCorazon(this.juego,"sprites/convida.gif",650+(i*30),10));				
			}
		}
	}
	
	/**
	 * Request that the ship move itself based on an elapsed ammount of
	 * time
	 * 
	 * @param delta The time that has elapsed since last move (ms)
	 */
	public void move(long delta) {
		// if we're moving left and have reached the left hand side

		// of the screen, don't move
		if ((dx < 0) && ((x < 10) || hayParedIzquierda)) {
			return;
		}
		// if we're moving right and have reached the right hand side

		// of the screen, don't move

		if ((dx > 0) && ((x > 775) || hayParedDerecha)) {
			return;
		}
		
		if ((dy < 0) && ((y < 10) || hayParedArriba)){
			return;
		}
		
		if ((dy > 0) && ((y > 575) || hayParedAbajo)) {
			return;
		}
				
		hayParedDerecha = false;
		hayParedIzquierda = false;
		hayParedArriba = false;
		hayParedAbajo = false;
				
		super.move(delta);
	}
	
		/**
		 * Notification that the player's ship has collided with something
		 * 
		 * @param other The entity with which the ship has collided
		 */
		public void colisionacon(Entidad other) {
			System.out.println("ORIENTACION "+other.getOrientacion());
			}
	
		public long getUltimoDisparo() {
			return ultimoDisparo;
		}
	
		public void setUltimoDisparo(long ultimoDisparo) {
			this.ultimoDisparo = ultimoDisparo;
		}
	
		public int getVidas() {
			return vidas;
		}
	
		public void setVidas(int vidas) {
			this.vidas = vidas;
		}
		
		public void restarVida()
		{
			this.vidasSprite.get(this.vidas-1).setSprite("sprites/sinvida.png");
			this.vidas--;
		}
		
		public void respawn()
		{
			restarVida();
			this.x = this.getPosicionInicialX();
			this.y = this.getPosicionInicialY();
		}
		

		public void gestionarMovimiento(CapturarTeclado teclado)
		{
			this.setMovimientoHorizontal(0);
			this.setMovimientoVertical(0);
			
			if ((teclado.isLeftPressed())){ //&& (!teclado.isRightPressed()) && (!teclado.isUpPressed()) && (!teclado.isDownPressed())) {
				this.setMovimientoHorizontal(-velocidadMovimiento);
				this.setOrientacion(Constantes.orientacion.OESTE);
				this.setSprite("sprites/shipIzq.gif");
			} if ((teclado.isRightPressed())){ //&& (!teclado.isLeftPressed()) && (!teclado.isUpPressed()) && (!teclado.isDownPressed())) {
				this.setMovimientoHorizontal(velocidadMovimiento);
				this.setOrientacion(Constantes.orientacion.ESTE);
				this.setSprite("sprites/shipDer.gif");
			} if ((teclado.isUpPressed())){ //&& (!teclado.isDownPressed()) && (!teclado.isRightPressed()) && (!teclado.isLeftPressed())) {
				this.setMovimientoVertical(-velocidadMovimiento);
				this.setOrientacion(Constantes.orientacion.NORTE);
				this.setSprite("sprites/shipAr.gif");
			} if ((teclado.isDownPressed())){ //&& (!teclado.isUpPressed()) && (!teclado.isRightPressed()) && (!teclado.isLeftPressed())) {
				this.setMovimientoVertical(velocidadMovimiento);	
				this.setOrientacion(Constantes.orientacion.SUR);
				this.setSprite("sprites/shipAb.gif");
			}

			if (teclado.isFirePressed()) {
				juego.intentarDisparar(this);
			}			
		}

		public String getNombreJugador() {
			return NombreJugador;
		}

		public void setNombreJugador(String nombreJugador) {
			NombreJugador = nombreJugador;
		}

		public CapturarTeclado getTeclado() {
			return teclado;
		}

		public void setTeclado(CapturarTeclado teclado) {
			this.teclado = teclado;
		}
		public ArrayList<EntidadCorazon> getVidasSprite() {
			return vidasSprite;
		}

		public void setVidasSprite(ArrayList<EntidadCorazon> vidasSprite) {
			this.vidasSprite = vidasSprite;
		}

		public String getIdJugador() {
			return idJugador;
		}

		public void setIdJugador(String idJugador) {
			this.idJugador = idJugador;
		}
	
	}